export class eventJs {
    constructor() {
      // 存储事件的数据结构
      // 为了查找迅速，使用了对象（字典）
      this._cache = {};
    }
    // 绑定
    on(type, callback) {
      // 为了按类查找方便和节省空间，
      // 将同一类型事件放到一个数组中
      // 这里的数组是队列，遵循先进先出
      // 即先绑定的事件先触发
      let fns = (this._cache[type] = this._cache[type] || []);
      if (fns.indexOf(callback) === -1) {
        fns.push(callback);
      }
      return this;
    }
    // 绑定一次性事件
    once(type, callback) {
      let self = this;
      let once = function() {
        self.off(type, once);
        callback.apply(this, arguments);
      };
      return this.on(type, once);
    }
    // 触发
    trigger(type, data) {
      let fns = this._cache[type];
      if (Array.isArray(fns)) {
        fns.forEach((fn) => {
          fn(data);
        });
      }
      return this;
    }
    // 解绑
    off(type, callback) {
      let fns = this._cache[type];
      if (Array.isArray(fns)) {
        if (callback) {
          let index = fns.indexOf(callback);
          if (index !== -1) {
            fns.splice(index, 1);
          }
        } else {
          //全部清空
          fns.length = 0;
        }
      }
      return this;
    }
  }